package com.gd.iot.energy.pojo.datapush.ctwing.dto;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 数据变化
 * <p>
 *     {
 * 	"deviceId": "2d1f1a708b5d4cef880937d67b5e5842",
 * 	"IMEI": "",
 * 	"IMSI": "",
 * 	"deviceType": "",
 * 	"tenantId": "1",
 * 	"productId": "1503",
 * 	"messageType": "dataReport",
 * 	"topic": "v1/up/ad",
 * 	"assocAssetId": "",
 * 	"timestamp": 1528183784371,
 * 	"payload": {
 * 		"APPdata":"/v7+aBAAAAAAAAAAgRaQHwEsQDIAADUAAAAAVRAWKAggIAAAdxY2ADAE"
 * 		},
 * 	"upPacketSN": -1,
 * 	"upDataSN": -1,
 * 	"serviceId": "",
 * 	"protocol": "tup"
 * }
 * </p>
 * @author kris
 * @date Created at 8:35 上午 2020/8/29
 */
@Setter
@Getter
@ToString
public class DataChangeDTO {

    /**
     * 设备ID
     */
    private String deviceId;

    /**
     * NB终端设备识别号
     */
    private String IMEI;

    /**
     * NB终端sim卡标识
     */
    private String IMSI;

    /**
     * 设备标识
     */
    private String deviceType;

    /**
     * 租户ID
     */
    private String tenantId;

    /**
     * 产品ID
     */
    private String productId;

    /**
     * 消息类型=dataReportTupUnion
     */
    private String messageType;

    /**
     * 数据上报主题
     */
    private String topic;

    /**
     * 合作伙伴ID
     */
    private String assocAssetId;

    /**
     * 时间戳
     */
    private Long timestamp;

    /**
     * 上行报文序号
     */
    private Integer upPacketSN;

    /**
     * 数据上报报文序号
     */
    private Integer upDataSN;

    /**
     * 协议类型
     */
    private String protocol;

    /**
     * 消息负载
     */
    private Payload payload;

    /**
     * 服务ID
     */
    private String serviceId;

    @Setter
    @Getter
    @ToString
    public static class Payload{

        /**
         * base64 16进制报文
         * <p>
         * 主动上报报文：
         * FE FE FE 68 10 78 56 34 12 00 00 00 81 16 90 1F 01 2C 25 00 00 00 35 50 68 00 00 00 30 06 15 03 18 20 00 00 97 16 36 34 26
         * 68 为帧起始符 68H
         * 10 为仪表类型 T
         * 78 为地址A0
         * 56 为地址A1
         * 34 为地址A2
         * 12 为地址A3
         * 00 为地址A4
         * 00 为地址A5
         * 00 为地址A6（A0、A1、A2、A3为要读取的水表的地址，从低位到高位）
         * 81 为控制码 C
         * 16 为数据长度域 L（90 1F 01 2C 25 00 00 00 35 50 68 00 00 00 30 06 15 03 18 20 00 00 共计16个字符）
         * 90 为数据标识DI0
         * 1F  为数据标识DI1
         * 01 为序列号SER
         * 2C 25 00 00 00 为累计流量 0.025M3，2C 为累计流量单位代号表示M3（表1）
         * 35 50 68 00 00 为流速量 0.6850M3/h，35 为流速单位代号表示M3/h（表1）
         * 00 30 06 15 03 18 20 为实时时间2018年3月15日6时30分0秒
         * 00 00 为状态字（具体定义见表3.1、表3.2）
         * 97 为校验码 CS（68 10 78 56 34 12 00 00 00 81 16 90 1F 01 2C 25 00 00 00 35 50 68 00 00 00 30 06 15 03 18 20 00 00）进行二进制算术累加，不计超过FFH的溢出值）
         * 16 为结束符 16H
         * 36 34为电池电压3.634V
         * 26 为CSQ信号强度
         * <p/>
         */
        private String APPdata;
    }

    @Setter
    @Getter
    @ToString
    public static class PayloadDecode{
        private String deviceType;
        private String deviceAddress;
        private String controlCode;
        private String length;
        private String di0;
        private String di1;
        private String serial;
        private BigDecimal total;
        private String totalUnit;
        private BigDecimal instant;
        private String instantUnit;
        private BigDecimal voltage;
        private Date time;
        private String status;
        private String crc;
        private Integer signal;

    }

}

